package com.itheima.config;

import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.context.annotation.Bean;

import javax.sql.DataSource;

public class MybatisConfig {
      /*
   <bean class="org.mybatis.spring.SqlSessionFactoryBean">
     <!--必须有-->
     <property name="dataSource" ref="dataSource"/>
     <!--配置别名-->
     <property name="typeAliasesPackage" value="com.itheima.bean"/>
     <!--配置mybatis的核心配置文件的位置，核心配置文件中也可以设置别名、映射文件位置等操作-->
     <!--<property name="configLocation" value="classpath:MybatisConfig.xml"/>-->
     <!--如果映射文件和mapper接口在同一个包下-->
     <!--<property name="mapperLocations" value="classpath:StudentMapper.xml"/>-->
   </bean>
   */
      @Bean //这个方法是由Spring调用,如果方法有参数,那么Spring会在容器中找对应的值/对象,
      // 参照匹配类型匹配,相当于省略了@AutoWired
    public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource){
        //创建SqlSessionFactoryBean对象
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
        //设置参数 配置Spring连接池
        factoryBean.setDataSource(dataSource);
        //配置别名
        factoryBean.setTypeAliasesPackage("com.itheima.bean");
        //返回SqlSessionFactoryBean
        return factoryBean;
    }

    /*
     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <!--扫描mapper所在的包，映射文件需要和包在一起，如果不在一起，就需要在SqlSessionFactoryBean中配置额外指定-->
            <property name="basePackage" value="com.itheima.mapper"/>
        </bean>
     */
    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer(){
          MapperScannerConfigurer msc = new MapperScannerConfigurer();
          msc.setBasePackage("com.itheima.mapper");
          return msc;
    }
}
